package JDBC;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class TestJDBC1 {
    public static void main(String[] args) throws SQLException {
        //0.让用户输入 id 和 name
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入id:");
        int id = scan.nextInt();
        System.out.println("请输入name:");
        String name = scan.nextLine();

        //1.创建数据源对象
        DataSource dataSource = new MysqlDataSource();//向上转型

        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");//向下转型
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("wlx020701");

//        //这种方式也可
//        dataSource.setUrl();
//        dataSource.setUser();
//        dataSource.setPassword();

        //2.和数据库服务器建立网络连接
        Connection connection = dataSource.getConnection();
//        System.out.println(connection);


        //3.构造 SQL 语句
        // 构造方式有很多种,这里只用了一种最主流的方式:
        // PreparedStatement 基于这个类来构造 SQL
//        String sql = "insert into student values(" + id + "," + name + ")";
        String sql = "insert into student values(?,?)";//此处的 ? 起到了占位符的作用
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2,name);

        //4.把 SQL 发送到服务器上进行执行
        // 这里的返回值 n 表示该操作返回的受到影响的行数 raw
        int n = statement.executeUpdate();
        System.out.println(n);

        //5.释放上述的资源
        //且释放资源的顺序需要和创建资源的顺序相反
        statement.close();
        connection.close();
    }
}
